package com.giscloud.amp.service.sys.impl;

import cn.hutool.core.date.DatePattern;
import com.giscloud.amp.entity.dto.OnlineUserDTO;
import com.giscloud.amp.entity.dto.SysRegisterDTO;
import com.giscloud.amp.entity.vo.SysRegisterVO;
import com.giscloud.amp.service.sys.OnlineUserService;
import com.giscloud.amp.service.sys.SysRegisterService;
import com.giscloud.datasource.page.PageInfo;
import com.google.common.collect.Maps;
import com.google.common.collect.Sets;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Service;

import java.util.*;

/**
 * @Author:gxd
 * @Description:
 * @Date: 18:03 2018/4/8
 * @Modified By:
 */
@Service("onlineUserService")
public class OnlineUserServiceImpl implements OnlineUserService {
	private final static Logger log = LoggerFactory
			.getLogger(OnlineUserServiceImpl.class);
	@SuppressWarnings("SpringJavaAutowiringInspection")
	// 加这个注解让IDE 不报: Could not autowire
//	@Autowired
//	private RedisUtils redisUtils;
	@Autowired
	private SysRegisterService sysRegisterService;

	@Value("${gxd.day: 7}")
	private int day;

	@Override
	public PageInfo getList(OnlineUserDTO onlineUserDTO) {
		String date = DatePattern.PURE_DATE_FORMAT.format(new Date());
		SysRegisterDTO sysRegisterDTO = new SysRegisterDTO();
		sysRegisterDTO.setNeedPagination(false);
		if(onlineUserDTO.getSystemId() != null){
			sysRegisterDTO.setSystemId(onlineUserDTO.getSystemId());
		}
		PageInfo sysRegisterList = sysRegisterService.getSysRegisterList(sysRegisterDTO);
		List<SysRegisterVO> sysRegisterVOs = (List<SysRegisterVO>) sysRegisterList.getList();
		Set<Integer> users = Sets.newHashSetWithExpectedSize(8);
		Map<String,String> systems= Maps.newHashMapWithExpectedSize(8);
//		for (SysRegisterVO sysRegisterVO : sysRegisterVOs) {
//			if("1".equals(onlineUserDTO.getLoginType()) || "0".equals(onlineUserDTO.getLoginType())) {
//				users.addAll(redisUtils.getOnlineUser(RedisConstant.REDIS_ON_LINE_PC_SYSTEM + sysRegisterVO.getSystemId() + ":" + date));
//			}
//			if("2".equals(onlineUserDTO.getLoginType()) || "0".equals(onlineUserDTO.getLoginType())) {
//				users.addAll(redisUtils.getOnlineUser(RedisConstant.REDIS_ON_LINE_MOBILE_SYSTEM + sysRegisterVO.getSystemId() + ":" + date));
//			}
//			systems.put(sysRegisterVO.getSystemId().toString(),sysRegisterVO.getSystemName());
//		}
//		List<OnlineUserVO> onlineUserList = new ArrayList<>();
//		for (Integer staffId : users) {
//			for(Map.Entry<String, String> entry : systems.entrySet()){
//				if(redisUtils.getBit(RedisConstant.REDIS_ON_LINE_MOBILE_SYSTEM+entry.getKey()+":"+date, Long.valueOf(staffId))
//						&&("2".equals(onlineUserDTO.getLoginType()) || "0".equals(onlineUserDTO.getLoginType()))){
//					OnlineUserVO onlineUserVO = new OnlineUserVO();
//					onlineUserVO.setStaffId(String.valueOf(staffId));
//					Object obj = redisUtils.get(RedisConstant.REDIS_ON_LINE_SYSTEM_STAFF+entry.getKey()+":"+ staffId);
//					if(obj == null){
//						continue;
//					}
//					Token token = FastJsonUtils.toBean(obj.toString(),Token.class);
//					onlineUserVO.setStaffCode(token.getToken());
//					onlineUserVO.setLoginName(token.getUname());
//					onlineUserVO.setStaffName(token.getStaffName());
//					if(StringUtils.isNotBlank(token.getLoginTime())) {
//						String[] times = token.getLoginTime().split("\\|");
//						onlineUserVO.setLoginTime(times[0]);
//						onlineUserVO.setLastAccessTime(times.length ==2 ?times[1]:"");
//					}
//					onlineUserVO.setSystemId(entry.getKey());
//					onlineUserVO.setSystemName(entry.getValue());
//					onlineUserVO.setStatus("1");
//					onlineUserVO.setStatusDesc("在线");
//					onlineUserVO.setLoginType("移动端");
//					if(token.getUname().contains(onlineUserDTO.getLoginName())){
//						onlineUserList.add(onlineUserVO);
//					}
//				}
//				if(redisUtils.getBit(RedisConstant.REDIS_ON_LINE_PC_SYSTEM+entry.getKey()+":"+date, Long.valueOf(staffId))
//						&&("1".equals(onlineUserDTO.getLoginType()) || "0".equals(onlineUserDTO.getLoginType()))){
//					OnlineUserVO onlineUserVO = new OnlineUserVO();
//					onlineUserVO.setStaffId(String.valueOf(staffId));
//					Object obj = redisUtils.get(RedisConstant.REDIS_SSO_TOKEN + staffId);
//					if(obj == null){
//						continue;
//					}
//					String token = obj.toString();
//					Object tokenObj = redisUtils.getObject(RedisConstant.REDIS_SSO_TOKEN + token);
//					if(tokenObj == null){
//						continue;
//					}
//					SsoToken ssoToken = (SsoToken)tokenObj;
//					if(StringUtils.isNotBlank(ssoToken.getLoginTime())) {
//						String[] times = ssoToken.getLoginTime().split("\\|");
//						onlineUserVO.setLoginTime(times[0]);
//						onlineUserVO.setLastAccessTime(times.length ==2 ?times[1]:"");
//					}
//					onlineUserVO.setStatus("1");
//					onlineUserVO.setStaffCode(ssoToken.getStaffCode());
//					onlineUserVO.setLoginName(ssoToken.getLoginName());
//					onlineUserVO.setStaffName(ssoToken.getStaffName());
//					onlineUserVO.setSystemId(entry.getKey());
//					onlineUserVO.setSystemName(entry.getValue());
//					onlineUserVO.setStatusDesc("在线");
//					onlineUserVO.setLoginType("电脑端");
//					if(ssoToken.getLoginName().contains(onlineUserDTO.getLoginName())){
//						onlineUserList.add(onlineUserVO);
//					}
//				}
//			}
//		}
//		Pagination pagination = new Pagination();
//		if (CollectionUtil.isEmpty(onlineUserList)) {
//			pagination.setTotal(0);
//			pagination.setRows(new ArrayList<>());
//			return pagination;
//		}
//		ListPagerUtils<OnlineUserVO> listPagerUtils = ListPagerUtils.create(onlineUserList, onlineUserDTO.getRows());
//		List<OnlineUserVO> pagedList = listPagerUtils.getPagedList(onlineUserDTO.getPage());
//		if (CollectionUtil.isNotEmpty(pagedList)) {
//			pagination.setTotal(onlineUserList.size());
//			pagination.setRows(pagedList);
//		} else {
//			pagination.setTotal(0);
//			pagination.setRows(new ArrayList<>());
//		}
		return PageInfo.of(new ArrayList<>());
	}

	@Override
	public int delete(String staffId, String staffCode, String systemId) {
//		String ssoToken = (String) redisUtils.get(RedisConstant.REDIS_SSO_TOKEN + staffId);
//		String date = DatePattern.PURE_DATE_FORMAT.format(new Date());
//		redisUtils.setBitmap(RedisConstant.REDIS_ON_LINE_PC_SYSTEM+systemId+":"+date, Long.valueOf(staffId),false,day);
//		redisUtils.setBitmap(RedisConstant.REDIS_ON_LINE_MOBILE_SYSTEM+systemId+":"+date, Long.valueOf(staffId),false,day);
//		redisUtils.del(RedisConstant.REDIS_SSO_TOKEN + staffId);
//		redisUtils.del(RedisConstant.REDIS_SSO_TOKEN + ssoToken);
//		redisUtils.del(RedisConstant.REDIS_SSO_ENCRYPT_TOKEN + ssoToken);
//        Object obj = redisUtils.get(RedisConstant.REDIS_ON_LINE_SYSTEM_STAFF +systemId+":"+ staffId);
//        if(obj != null){
//            Token token = FastJsonUtils.toBean(obj.toString(),Token.class);
//            redisUtils.del(RedisConstant.REDIS_MOBILE_TOKEN+token.getToken());
//            redisUtils.del(RedisConstant.REDIS_ON_LINE_SYSTEM_STAFF+systemId+":"+staffId);
//        }
		return 1;
	}
}
